//package com.minbaojianguan.common.constant;
//
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//
///**
// * lzx
// *
// * @param <T>
// */
//@Component
//public interface BaseRepository<T> {
//
//
//    /**
//     * 根据实体类中字段不为null的条件查询进行删除,条件全部使用=号and条件
//     *
//     * @param o
//     * @return
//     */
//    void deleteByBean(T o);
//
//    /**
//     * 根据实体类中字段不为null的条件查询进行删除,条件全部使用=号and条件
//     *
//     * @return
//     */
//    void deleteByKeys(String[] keys);
//
//    /**
//     * 根据主键进行更新,这里最多只会更新一条数据
//     *
//     * @param o
//     * @return
//     */
//    int updateByKey(T o);
//
//    /**
//     * 根据条件查询，批量更新
//     *
//     * @param o
//     */
//    int updateByBean(T o);
//
//    /**
//     * 根据实体类不为null的字段进行查询,条件全部使用=号and条件
//     *
//     * @param o
//     */
//    List<T> findByBean(T o);
//
//
//}

package com.hlkj.baojin.constant;


import com.hlkj.baojin.dao.repository.utils.DaoQueryUtils;
import com.mongodb.client.result.UpdateResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import java.lang.reflect.ParameterizedType;
/**
 * lzx
 * @param <T>
 */
@Component
public abstract class BaseRepository<T>{

    protected final MongoTemplate mongoTemplate;
    //
    Class <T> entityClass = (Class <T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

    @Autowired
    public BaseRepository(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }


    /**
     *  根据条件查询，批量更新
     */
    public  int updateByBean(T queryO,T updateO){
        Query query = new Query();
        Update update=new Update();
        DaoQueryUtils.queryBean(queryO.getClass().getDeclaredFields(),queryO,query);
        //排序
        DaoQueryUtils.query(query);
        DaoQueryUtils.updateBean(queryO.getClass().getDeclaredFields(),updateO,update);
        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, entityClass);
        return (int) updateResult.getModifiedCount();
    }

}
